package errors

// 函数参数选项代码。参考 https://www.piglei.com/articles/go-func-argument-patterns/ 。

// NewOption 是 fundamental 类型的配置选项。
type NewOption interface {
	applyFundamental(*fundamental)
}

// WithCodeOption 是 withCode 类型的配置选项。
type WithCodeOption interface {
	applyWithCode(*withCode)
}

// WithCodeOpt 是错误码配置选项，实现了多个配置接口。
type WithCodeOpt int

var _ NewOption = new(WithCodeOpt)
var _ WithCodeOption = new(WithCodeOpt)

func (w *WithCodeOpt) applyFundamental(f *fundamental) {
	f.code = int(*w)
}

func (w *WithCodeOpt) applyWithCode(wi *withCode) {
	wi.code = int(*w)
}
